/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;


import fisica.AntecedenteFisica;
import fisica.CapaFisica;
import hibernate.objeto.Antecedente;
import hibernate.objeto.Farmacologico;
import hibernate.objeto.Paciente;
import java.util.Vector;

/**
 *
 * @author Gonzalo
 */
public class AntecedenteLogica extends CapaLogica {

    /**
     * Crea la ficha de los antecedentes para el paciente.
     *
     * @param datosAntecedentesPersonal Los datos correspondientes al apartado
     * Antecedentes Personales
     * @param datosAntecedentesFamiliar Los datos correspondientes al apartado
     * Antecedentes Familiares
     * @param datosAntecedentesHabito Los datos correspondientes al apartado
     * Antecedentes Hábitos
     * @param datosAntecedentesFarmacologico Los datos correspondientes al apartado
     * Antecedentes Farmacologico
     * @param datosAntecedentesHabitacional Los datos correspondientes al apartado
     * Antecedentes Habitacionales
     * @param datosAntecedentesOcupacional Los datos correspondientes al apartado
     * Antecedentes Ocupacionales
     * @param paciente  El paciente a quien se le carga la ficha
     * @return true si se agregó/modificó correctamente, false en caso contrario
     */
    public static boolean agregarAntecedente(Object[][]
            datosAntecedentesPersonal, Object[][] datosAntecedentesFamiliar,
            String[] datosAntecedentesHabito, Object[][]
            datosAntecedentesFarmacologico, String[] datosAntecedentesHabitacional,
            String[] datosAntecedentesOcupacional, Paciente paciente) {

        //Crea el objeto Antecedenete
        Antecedente antecedente = crearObjetoAntecedente(paciente);

        if (CapaFisica.guardarOActualizarObjeto(antecedente)) {
            //Crea los objetos Antecedenete Personal, Familiar y Farmacologico
            if (AntecedentePersonalLogica.agregarAntecedentePersonal(
                    datosAntecedentesPersonal, antecedente) &&

                    AntecedenteFamiliarLogica.agregarAntecedenteFamiliar(
                    datosAntecedentesFamiliar, antecedente) &&

                    FarmacologicoLogica.agregarAntecedenteFarmacologico(
                    datosAntecedentesFarmacologico, antecedente) &&

                    AntecedenteHabitoLogica.agregarAntecedenteHabito(
                    datosAntecedentesHabito, antecedente) &&

                    AntecedenteHabitacionalLogica.agregarAntecedenteHabitacional(
                    datosAntecedentesHabitacional, antecedente) &&
                    
                    AntecedenteOcupacionalLogica.agregarAntecedenteOcupacional(
                    datosAntecedentesOcupacional, antecedente)){
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * Crea un objeto Antecedente con los datos pasados por parámetro.
     *
     * @param unPaciente El paciente a quien se le carga la ficha
     * @return true si se agregó/modificó correctamente, false en caso contrario
     */
    public static Antecedente crearObjetoAntecedente(Paciente unPaciente){
        Antecedente antecedente = new Antecedente();

        antecedente.setPaciente(unPaciente);

        return antecedente;
    }

    /**
     * Crea un antecedente para un medicamento.
     *
     * @param farmacologico El medicamento a agregar
     * @param paciente El paciente a quien se agrega el antecedente
     * @return true si se agregó correctamente, false en caso contrario
     */
    public static boolean agregarAntecedenteFarmacologico(
            Farmacologico farmacologico, Paciente paciente) {
        //Crea el antecedente
        Antecedente antecedente = crearObjetoAntecedente(paciente);

        if (CapaFisica.guardarOActualizarObjeto(antecedente)) {
            //Setea el id del objeto farmacologico
            farmacologico.setAntecedente(antecedente);
            if (CapaFisica.guardarOActualizarObjeto(farmacologico)) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * Retorna el último antecedente cargado del paciente consultado
     *
     * @param paciente El paciente consultado
     * @return El objeto Antecedente más reciente
     */
    public static Antecedente getAntecedenteMasRecientePaciente(Paciente paciente) {
        Vector<Antecedente> antecedente =
                AntecedenteFisica.getVectorAntecedentePorIdPaciente(
                paciente.getIdPaciente());

        if (antecedente != null) {
            return antecedente.lastElement();
        } else {
            return null;
        }
    }

    /**
     * Retorna el texto HTML correspondiente a la descripcion de los antecedentes
     * del paciente.
     *
     * @param paciente El paciente
     * @return El String que contiene el HTML
     */
    public static String getAntecedenteHTML(Paciente paciente) {
        String antecedenteHTML = "";
        if (paciente != null) {
            antecedenteHTML =
                "<font size=\"3\" face=\"arial\" color=\"blue\">ANTECEDENTES</font><<br><br> " +
                AntecedentePersonalLogica.getAntecedentePersonalHTML(paciente) +
                AntecedenteFamiliarLogica.getAntecedenteFamiliarHTML(paciente) +
                FarmacologicoLogica.getAntecedenteFarmacologicoHTML(paciente);
        } else {
            antecedenteHTML =
                    "<font size=\"3\" face=\"arial\" color=\"blue\">ANTECEDENTES</font><br> " +
                    "<font size=\"3\" face=\"arial\">No posee</font><br></font>";
        }

        return antecedenteHTML;
    }

}
